package com.gdzl_hadoop.util;

import com.gdzl_hadoop.pojo.Xzq;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * 类名称：XzqMenuUtil
 * 类描述：递归构造树型结构
 */
public class XzqMenuUtil {

    //    public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>();
    private List<Xzq> XzqMenu;
    private List<Object> list;
    private Map<String, List<String>> xzqdms;

    /**
     * 构建全省行政区树
     *
     * @param menu
     * @return
     */
    public List<Object> menuList(List<Xzq> menu) {
        this.xzqdms = xzqdms;
        this.XzqMenu = menu;
        list = new ArrayList<>();
        for (Xzq x : menu) {
            //假设有多个省，实际只需要广东
            if (x.getParentid().equals("-1")) {
                Map<String, Object> mapArr = new LinkedHashMap<String, Object>();
                mapArr.put("value", x.getXzqdm());//编码
                mapArr.put("label", x.getXzqmc());//行政区

                // mapArr.put("xzqjb",x.getXzqjb());//类型
                mapArr.put("childList", menuChildForAllXzq(x.getXzqdm()));
                list.add(mapArr);
            }

            //列表已根据level排序返回，提前跳出循环提高效率
            if (!x.getParentid().equals("-1"))
                break;
        }
        return list;
    }

    public List<?> menuChildForAllXzq(String id) {
        List<Object> lists = new ArrayList<Object>();
        for (Xzq a : XzqMenu) {

            if (a.getParentid().equals(id)) {
                Map<String, Object> childArray = new LinkedHashMap<String, Object>();
                childArray.put("value", a.getXzqdm());
                childArray.put("label", a.getXzqmc());
                //   childArray.put("xzqjb",a.getXzqjb());

                List<?> temp = menuChildForAllXzq(a.getXzqdm());
                if (!temp.isEmpty())
                    childArray.put("childList", temp);
                lists.add(childArray);
            }
        }
        return lists;
    }

    /**
     * 构建含文件的行政区树
     *
     * @param menu
     * @param xzqdms
     * @return
     */
    public List<Object> menuList(List<Xzq> menu, Map<String, List<String>> xzqdms) {
        this.xzqdms = xzqdms;
        this.XzqMenu = menu;
        list = new ArrayList<>();
        for (Xzq x : menu) {
            //假设有多个省，实际只需要广东
            if (x.getParentid().equals("-1")) {
                Map<String, Object> mapArr = new LinkedHashMap<String, Object>();
                mapArr.put("value", x.getXzqdm());//编码
                if (this.xzqdms.keySet().contains(x.getXzqdm())) {

                    mapArr.put("label", x.getXzqmc() + "(存在文件)");//行政区
                    mapArr.put("hasfile", xzqdms.get(x.getXzqdm()));
                } else {

                    mapArr.put("label", x.getXzqmc());//行政区
                    mapArr.put("hasfile", 0);
                }

                mapArr.put("childList", menuChild(x.getXzqdm()));
                list.add(mapArr);
            }
            //列表已根据level排序返回，提前跳出循环提高效率
            if (!x.getParentid().equals("-1"))
                break;
        }
        return list;
    }

    public List<?> menuChild(String id) {
        List<Object> lists = new ArrayList<Object>();
        for (Xzq a : XzqMenu) {

            if (a.getParentid().equals(id)) {
                Map<String, Object> childArray = new LinkedHashMap<String, Object>();
                childArray.put("value", a.getXzqdm());

                //   childArray.put("xzqjb",a.getXzqjb());
                if (xzqdms.keySet().contains(a.getXzqdm())) {
                    childArray.put("label", a.getXzqmc() + "(存在文件)");
                    childArray.put("hasfile", xzqdms.get(a.getXzqdm()));
                } else {
                    childArray.put("label", a.getXzqmc());
                    childArray.put("hasfile", 0);
                }

                List<?> temp = menuChild(a.getXzqdm());
                if (!temp.isEmpty())
                    childArray.put("childList", temp);
                lists.add(childArray);
            }
        }
        return lists;
    }

}
